package seueniumfordemoiselle.seleniumsimplify.testes;

import org.openqa.selenium.JavascriptExecutor;
import org.testng.Assert;
import org.testng.annotations.Test;

import seueniumfordemoiselle.seleniumsimplify.pages.InicialPage;
import seueniumfordemoiselle.seleniumsimplify.pages.UFCadastroPage;
import seueniumfordemoiselle.seleniumsimplify.pages.UFListPage;
import seueniumfordemoiselle.seleniumsimplify.utils.TabelaListagem;


public class SimplifyUFTest extends BaseTest{

	private InicialPage page;
	
	private UFCadastroPage pageCadastro;
	
	private UFListPage pageList;
	
	@Test
	public void cadastrarUF(){
		
			//Acessa página inicial
			page = new InicialPage(this.driver);
			page.open();
			
			//Acessa página de listagem de Ufs
			page.clicarMenuUF();

			//Acessar página de cadastro	
			pageCadastro = new UFCadastroPage(this.driver);
			pageCadastro.clicarNovo();
			
			//Preencher cadastro			
			pageCadastro.digitarNome("Bahia");
			pageCadastro.digitarSigla("BA");
			
			pageCadastro.clicarLinkInserir();
			//Acessar página de listagem
			pageList = new UFListPage(page.getDriver());
			
			//Verificações
			Assert.assertEquals("Entidade inserida com sucesso.",pageList.pegarMensagem());			
			Assert.assertTrue(pageList.getTabela().isRegistroPresente("Nome", "Bahia"));
			Assert.assertTrue(pageList.getTabela().isRegistroPresente("Sigla", "BA"));		
	}
	
	@Test(dependsOnMethods={"cadastrarUF"})
	public void editarUF(){
		
		//Acessa página inicial
		page = new InicialPage(this.driver);
		page.open();
		
		//Acessa página de listagem de Ufs
		page.clicarMenuUF();
		pageList = new UFListPage(this.driver);
		
		//Verificar antes de o registro encontra-se cadastrado antes de alterar
		TabelaListagem tabela = pageList.getTabela();
		Assert.assertTrue(tabela.isRegistroPresente("Nome", "Bahia"),"Registro não encontrado na listagem.");
		
		//Acesso a página de alteração
		tabela.clicarAlterar("Nome", "Bahia", "Editar");
		pageCadastro = new UFCadastroPage(this.driver);
		
		//Alterar Cadastro
		pageCadastro.digitarNome("Sergipe");
		pageCadastro.digitarSigla("SE");
		pageCadastro.clicarLinkAlterar();
		
		//Acessar página de listagem
		pageList = new UFListPage(page.getDriver());
		
		//Verificações
		Assert.assertEquals("Entidade atualizada com sucesso.",pageList.pegarMensagem());			
		Assert.assertTrue(pageList.getTabela().isRegistroPresente("Nome", "Sergipe"));
		Assert.assertTrue(pageList.getTabela().isRegistroPresente("Sigla", "SE"));
		Assert.assertFalse(pageList.getTabela().isRegistroPresente("Nome", "Bahia"));
		Assert.assertFalse(pageList.getTabela().isRegistroPresente("Sigla", "BA"));		
	}
	
	@Test(dependsOnMethods={"editarUF"})
	public void apagarUFPelaListagem(){
		//Acessa página inicial
		page = new InicialPage(this.driver);
		page.open();
		
		//Acessa página de listagem de Ufs
		page.clicarMenuUF();
		pageList = new UFListPage(this.driver);
		TabelaListagem tabela = pageList.getTabela();
		Assert.assertTrue(tabela.isRegistroPresente("Nome", "Sergipe"),"Registro não encontrado na listagem.");
	
		//Injeção de JavaScript pois não existe funçaõ para tratar com alerts e confirms 
		((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
		
		tabela.clicarApagar("Nome", "Sergipe", "Apagar");
		
		//Acessar página de listagem
		pageList = new UFListPage(page.getDriver());
	
		//Verificações
		Assert.assertEquals("Entidade excluída com sucesso.",pageList.pegarMensagem());
		Assert.assertFalse(pageList.getTabela().isRegistroPresente("Nome", "Sergipe"));
		Assert.assertFalse(pageList.getTabela().isRegistroPresente("Sigla", "SE"));		
	}
}
